import Vue from 'vue'
import Vuex from 'vuex'
import router from '@/router'
import { post, get, setItem, getItem, remItem } from './com'
import axios from "axios";
var qs = require('qs');


Vue.use(Vuex)


const store = new Vuex.Store({
	state: {
        getInfo: getItem('getInfo')?getItem('getInfo'):null,
        menuList: getItem('menuList')?getItem('menuList'):null,
        bgColor: getItem('bgColor')?getItem('bgColor'):'#515a6e',
        lists: [] // 存储从后台获取的数据
	},
	mutations: {
        SET_GETINFO: (state, getInfo) => {
            state.getInfo = getInfo;
        },
        SET_BGCOLOR: (state, bgColor) => {
            state.bgColor = bgColor;
        },
        SET_MENULIST: (state, menuList) => {
            state.menuList = menuList;
        },
        SET_LISTS(state, data) {
            state.lists = data;
        }
	},
    getters:{
        getInfo: state => state.getInfo,
        menuList: state => state.menuList,
        bgColor: state => state.bgColor,
        lists: state => state.lists
    },
    actions: {
        // 账户登录
        Login({ commit }, userInfo) {
            return new Promise((resolve, reject) => {
                post('user/login', userInfo).then(res => {
                    if(res&&res.resCode==1){
                        setItem('getInfo',res.resObj);
                        commit('SET_GETINFO',res.resObj);
                    }
                    resolve(res)
                }).catch(error => {
                    reject(error)
                })
            })
        },
        // 拉取菜单列表
        MenuList({ commit }, id) {
            return new Promise((resolve, reject) => {
                post('user/listMenu', id).then(res => {
                    if(res&&res.resCode==1){
                        setItem('menuList',res.resObj);
                        commit('SET_MENULIST',res.resObj);
                    }
                    resolve(res)
                }).catch(error => {
                    reject(error)
                })
            })
        },
        // 清除所有的本地缓存
        clearAll({ commit }) {
            return new Promise((resolve) => {
                remItem();
                //清除储存在state中的值
                commit('SET_GETINFO', null)
                commit("SET_MENULIST", null)
                router.push('/login')
                resolve()
            })
        },
        async fetchLists({ commit }, editForm) {
            try {
                const response = await axios.get('/api/manage/queryAll', {
                    params: {
                        editForm: editForm // 将 editForm 作为参数传递给后端请求
                    }
                });
                const data = response.data; // 假设后端返回数据
                commit('SET_LISTS', data.data); // 更新 tableData
            } catch (error) {
                console.error('Error fetching lists:', error);
            }
        },
        async modifyUser({ commit }, editForm) {
            try {
                // 发送 POST 请求，将 editForm 作为请求体数据传递给服务器
                const response = await axios.post('/api/manage/update',
                    qs.stringify(editForm));
                const updatedUser = response.data; // 假设后端返回更新后的用户信息
                // 在这里你可以选择更新本地状态，例如通过 mutation
                // commit('UPDATE_USER', updatedUser);
                return updatedUser; // 返回更新后的用户信息（可选）
            } catch (error) {
                console.error('Error modifying user:', error);
                throw error; // 抛出错误，以便在组件中处理
            }
        },
        async addUser({ commit }, editForm) {
            try {
                // 发送 POST 请求，将 editForm 作为请求体数据传递给服务器
                const response = await axios.post('/api/manage/insert',
                    qs.stringify(editForm));
                const addUser = response.data; // 假设后端返回更新后的用户信息
                // 在这里你可以选择更新本地状态，例如通过 mutation
                // commit('UPDATE_USER', updatedUser);
                return addUser; // 返回更新后的用户信息（可选）
            } catch (error) {
                console.error('Error modifying user:', error);
                throw error; // 抛出错误，以便在组件中处理
            }
        },
        async deleteUser({ commit }, id) {
            try {
                // 发送 DELETE 请求，将 userIdList 作为请求参数传递给后端
                const response = await axios.post('/api/manage/delete',

                       id
                    // 假设后端可以接受一个包含 userId 的对象或数组
                );
                // 在这里你可以处理删除成功的逻辑，例如从本地状态中移除被删除的用户
                // commit('REMOVE_USER', userIdList);
                return response.data; // 返回后端的响应数据（可选）
            } catch (error) {
                console.error('Error deleting user:', error);
                throw error; // 抛出错误，以便在组件中处理
            }
        },
    },
})

export default store
